package com.mxz.common.core.web.page;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mxz.common.core.constant.HttpStatus;
import com.mxz.common.core.utils.StringUtils;
import com.mxz.common.core.utils.sql.SqlUtil;

import java.util.List;

/**
 * 通用分页处理
 *
 * @author mxz
 */
public class PageCommon {

    /**
     * 设置请求分页数据
     */
    protected Page startPage() {
        return startPage(null,null);
    }

    /**
     * 设置请求分页数据asc排序
     * @param orderByColumn
     */
    protected Page startPageAsc(String orderByColumn) {
        return startPage(orderByColumn,"asc");
    }

    /**
     * 设置请求分页数据desc排序
     * @param orderByColumn
     */
    protected Page startPageDesc(String orderByColumn) {
        return startPage(orderByColumn,"desc");
    }

    /**
     * 设置请求分页数据
     * @param orderByColumn 排序字段
     * @param isAsc 排序方式 asc desc
     */
    protected Page startPage(String orderByColumn,String isAsc) {
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        if(pageNum == null){
            pageNum = 1;
        }
        if(pageSize == null||pageSize>50){
            pageSize = 10;
        }
        if(pageDomain.getOrderByColumn()==null){
            pageDomain.setOrderByColumn(orderByColumn);
        }
        if(pageDomain.getIsAsc()==null){
            pageDomain.setIsAsc(isAsc);
        }
        String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
        return PageHelper.startPage(pageNum, pageSize, orderBy);
    }

    /**
     * 响应请求分页数据
     */
    protected TableDataInfo getDataTable(List<?> list) {
        return getDataTable(list,null);
    }

    /**
     * 查询后又单独循环封装处理的list 响应请求分页数据
     */
    protected TableDataInfo getDataTable(List<?> list, Page page) {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setRows(list);
        rspData.setMsg("查询成功");
        if(StringUtils.isNull(page)){
            rspData.setTotal(new PageInfo(list).getTotal());
        }else{
            rspData.setTotal(page.getTotal());
        }
        return rspData;
    }

}
